home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / arexx / ole1v10a.lha / OLE_System / ole / Config.ole < prev    next >
Encoding:
Text File  |  1995-02-10  |  10.4 KB  |  461 lines

  1. /*
  2.  * Config.ole
  3.  *
  4.  * USAGE: Config.ole
  5.  *
  6.  * Config.ole is the first release of the OLE server configuration module.
  7.  * Let you choose some parameters will be used by all modules.
  8.  *
  9.  * HISTORY:
  10.  * v1.03    bugs fixed, used the new command INFO
  11.  *
  12.  * v1.04    added the possibility to change the progress indicator
  13.  *
  14.  * v1.05    bug fixed in the "INFO" request
  15.  *
  16.  * v1.06    added ActivateGadget()
  17.  *
  18.  * v1.07    aligned with the new server design v1.10
  19.  *
  20.  * v1.08    bug fixed in ReqFile()
  21.  *
  22.  * v1.09    the catalog compiler is an OLE module
  23.  *
  24.  * $(C): (1994, Rocco Coluccelli, Bologna)
  25.  * $VER: Config.ole 1.09 (04.Dec.1994)
  26.  */
  27.  
  28. PARSE ARG oleclip
  29. PARSE VALUE GETCLIP(oleclip) WITH jobID modID box.left box.top char.w char.h olewin oleport olehost userscreen userport . locale config .
  30.  
  31. IF ~SHOW('C',config) THEN DO
  32.     olefile.ct     = 'OLE:misc/OLE.rexx.ct'
  33.     olefile.ed     = 'C:ED'
  34.     END
  35.  
  36. ELSE PARSE VALUE GETCLIP(config) WITH olefile.ct','olefile.ed','
  37.  
  38.  
  39. ADDRESS VALUE oleport
  40.  
  41. /*
  42.  *    Get the server configuration clip
  43.  */
  44. INFO jobID modID 'config.0.1'
  45. oleconfig = GETCLIP(oleclip)
  46.  
  47. IF ~SHOW('C',oleconfig) THEN DO
  48.     win.bl = 3; win.bt = 15; win.br = 4; win.bb = 2
  49.     win.font = 'topaz.font'; win.fonth = 8; win.fontw = 8
  50.     oleind.outer = 0; oleind.inner = 0; oleind.color = 4
  51.     END
  52.  
  53. ELSE PARSE VALUE GETCLIP(oleconfig) WITH win.bl','win.bt','win.br','win.bb','win.font','win.fonth','win.fontw','oleind.outer','oleind.inner','oleind.color','
  54.  
  55. /*
  56.  *    Get the progress indicator height
  57.  */
  58. INFO jobID modID 'oleind.hei'
  59. oleind.hei = GETCLIP(oleclip)
  60.  
  61. /*
  62.  *    Get the compiler message port
  63.  */
  64. INFO jobID modID 'oleport.' || jobID || '.' || modID + 1
  65. compilerport = GETCLIP(oleclip)
  66.  
  67.  
  68. IF OPENPORT(olehost) == NULL() THEN DO
  69.     ERROR jobID modID 1 olehost
  70.     SETJOB jobID 'end'
  71.     EXIT 10
  72.     END
  73.  
  74. rt_TAG = 'rt_pubscrname=' || userscreen 'rtez_flags=ezreqf_centertext'
  75. st = GUIGads()
  76. DO UNTIL st = 'end'
  77.  
  78.     CALL WAITPKT(olehost)
  79.     pkt = GETPKT(olehost)
  80.  
  81.     IF pkt == NULL() THEN ITERATE
  82.  
  83.     PARSE VALUE GETARG(pkt) WITH cmd argv .
  84.     /*
  85.      *    n0 = gadget to update    nn = gadget to activate
  86.      */
  87.     PARSE VALUE GETARG(pkt,1) WITH n0 nn .
  88.  
  89.     SELECT
  90.  
  91.         WHEN cmd = 'CATALOG' THEN DO
  92.  
  93.             IF argv = 'EDIT' THEN
  94.                 INTERPRET 'ADDRESS COMMAND' '"' || olefile.ed olefile.ct || '"'
  95.  
  96.             ELSE IF olefile.ct ~= '' & RIGHT(olefile.ct,3) = '.ct' THEN DO
  97.  
  98.                 IF ~SHOW('P',compilerport) THEN DO
  99.                     SETJOB jobID modID + 1
  100.                     CALL Wait_For_Port(compilerport)
  101.                     END
  102.  
  103.                 IF SHOW('P',compilerport) THEN INTERPRET 'ADDRESS' compilerport '"COMPILE' olefile.ct || '"'
  104.                 END
  105.         END
  106.  
  107.         WHEN cmd = 'PROGIND' THEN
  108.             IF argv = '' THEN
  109.                 DO i = 0 TO 100 BY 2
  110.                     CALL FillProgInd(n0,i,oleind.color)
  111.                 END
  112.  
  113.             ELSE DO
  114.                 oleind.argv = oleind.argv + 1
  115.                 IF oleind.argv = 3 & argv ~= 'COLOR' THEN oleind.argv = 0
  116.                 IF oleind.argv = 16 THEN oleind.argv = 0
  117.             END
  118.  
  119.         WHEN cmd = 'SETUP' THEN DO
  120.             CALL Gadgets(7,n1.st,n2.st)
  121.             st = argv
  122.             CALL Gadgets(4,n1.st,n2.st)
  123.  
  124.             IF st = nborder THEN CALL BorderBox()
  125.         END
  126.  
  127.         WHEN cmd = 'BORDER' THEN DO
  128.             CALL BorderBox()
  129.             str = GETARG(pkt,2)
  130.             IF DATATYPE(str,'N') & str > 0 THEN win.argv = str
  131.             g_str.n0 = win.argv
  132.             CALL BorderBox()
  133.         END
  134.  
  135.         WHEN cmd = 'REQFILE' THEN DO
  136.             PARSE VAR argv t .
  137.             str = STRIP(GETARG(pkt,2),'B')
  138.  
  139.             IF str = '' THEN str = ReqFile(100,100,olefile.t,GetLocale(t),userscreen)
  140.  
  141.             olefile.t = str
  142.             g_str.n0 = str
  143.         END
  144.  
  145.         WHEN cmd = 'OKAY' THEN DO
  146.  
  147.             IF st = nborder THEN CALL BorderBox()
  148.  
  149.             IF st = 1 THEN st = 'end'
  150.  
  151.             ELSE DO
  152.                 CALL Gadgets(7,n1.st,n2.st)
  153.                 st = 1
  154.                 CALL Gadgets(4,n1.st,n2.st)
  155.                 END
  156.         END
  157.  
  158.         WHEN cmd = 'UNICONIFY' THEN CALL Gadgets(8,1,g_gads)
  159.  
  160.         WHEN cmd = 'HELP' THEN ABOUT jobID modID 'HELP' || st
  161.  
  162.         WHEN cmd = 'QUIT' THEN st = 'end'
  163.  
  164.         OTHERWISE NOP
  165.  
  166.     END
  167.  
  168.     IF n0 ~= '' THEN DO
  169.         CALL Gadgets(2,n0)
  170.         IF nn ~= '' THEN CALL ActivateGadget(olewin,GAD.nn)
  171.         CALL SETCLIP(config,olefile.ct','olefile.ed',')
  172.         END
  173.  
  174.     CALL REPLY(pkt,0)
  175.  
  176. END
  177.  
  178. CALL CLOSEPORT(olehost)
  179.  
  180. IF cmd ~= 'QUIT' THEN DO
  181.     CALL SETCLIP(oleconfig,win.bl','win.bt','win.br','win.bb','win.font','win.fonth','win.fontw','oleind.outer','oleind.inner','oleind.color',')
  182.     'CONFIG 0 1'
  183.     SETJOB jobID 'end'
  184.     NEWPREFS
  185.     END
  186.  
  187. EXIT 0
  188.  
  189.  
  190. /*
  191.  *    procedure that split a path and request a file
  192.  *
  193.  *    pathname = ReqFile(x,y,path,title,userscreen)
  194.  */
  195. ReqFile: PROCEDURE
  196.  
  197.     dir = ''; file = ''
  198.     IF ARG(3) ~= '' THEN DO
  199.         pos = LASTPOS('/',ARG(3))
  200.  
  201.         IF pos = 0 THEN DO
  202.             pos = POS(':',ARG(3))
  203.             dir = LEFT(ARG(3),pos)
  204.             END
  205.  
  206.         ELSE dir = LEFT(ARG(3),pos - 1)
  207.  
  208.         file = SUBSTR(ARG(3),pos + 1)
  209.         END
  210.  
  211. RETURN GetFile(ARG(1),ARG(2),dir,file,ARG(4),ARG(5))
  212.  
  213.  
  214. GetLocale: PROCEDURE EXPOSE locale
  215. ARG strID
  216.  
  217.     strID = 'þ'strID'þ'; PARSE VALUE GETCLIP(locale) WITH (strID)text'Þ'
  218.  
  219. RETURN text
  220.  
  221.  
  222. BorderBox:
  223.  
  224.     x = win.w - win.br; y = win.h - win.bb
  225.     CALL SetDrMd(olewin,COMPLEMENT)
  226.     CALL Move(olewin,win.bl,win.bt)
  227.     CALL Draw(olewin,x,win.bt); CALL Draw(olewin,x,y); CALL Draw(olewin,win.bl,y); CALL Draw(olewin,win.bl,win.bt)
  228.     CALL SetDrMd(olewin,JAM1)
  229.  
  230. RETURN
  231.  
  232.  
  233. DrawProgInd:
  234.  
  235.     IF ARG(5) = 0 THEN RETURN
  236.     CALL Move(olewin,ARG(1),ARG(4))
  237.     CALL SetAPen(olewin,3 - ARG(5))
  238.     CALL Draw(olewin,ARG(1),ARG(2)); CALL Draw(olewin,ARG(3),ARG(2))
  239.     CALL SetAPen(olewin,ARG(5))
  240.     CALL Draw(olewin,ARG(3),ARG(4)); CALL Draw(olewin,ARG(1),ARG(4))
  241.  
  242. RETURN
  243.  
  244.  
  245. FillProgInd:
  246. PARSE ARG n
  247.  
  248.     x1 = g_xpos.n + 12; y1 = g_ypos.n + 8
  249.     x2 = g_len.n - 24; y2 = g_ypos.n + g_hei.5 - 8
  250.  
  251.     IF ARG(2) = 0 THEN DO
  252.         CALL SetAPen(olewin,0); CALL RectFill(olewin,x1,y1,x1 + x2,y2)
  253.         END
  254.  
  255.     CALL SetAPen(olewin,ARG(3)); CALL RectFill(olewin,x1,y1,x1 + ARG(2) * x2 % 100,y2)
  256.  
  257. RETURN
  258.  
  259.  
  260. GUIGads:
  261.  
  262.     g_offx. = 2;    g_offx.1 = 0;            g_offx.3 = 2
  263.     g_offy. = 2;    g_offy.1 = char.h + 1;    g_offy.3 = 3
  264.     g_wid. = 8;                g_wid.1 = 0;            g_wid.3 = 12
  265.     g_hei. = char.h + 4;    g_hei.1 = char.h + 1;    g_hei.3 = char.h + 6
  266.     g_hei.5 = 20; g_offx.5 = 0; g_offy.5 = 0
  267.  
  268.     g_sx = char.w % 2;    g_sy = char.h % 4
  269.     g_onoff. = 0
  270.  
  271.     box.left = box.left + g_sx; box.top = box.top + 2 * g_sy
  272.     box.w = 30 * char.w
  273.  
  274.     n = 1
  275.  
  276.     nmain = 1; nborder = 2; nlocale = 3; nprog = 4; nbases = 5
  277.  
  278.     n1.nmain = n
  279.     x = box.left; y = box.top
  280.     CALL IniGad(2,2,0,'SETUP' nborder,CENTER(GetLocale(1),24))
  281.     y = y + g_hei.3 + 2 * g_sy
  282.     CALL IniGad(2,2,0,'SETUP' nlocale,CENTER(GetLocale(2),24))
  283.     y = y + g_hei.3 + 2 * g_sy
  284.     CALL IniGad(2,2,0,'SETUP' nprog,CENTER(GetLocale(3),24))
  285.     y = y + g_hei.3 + 2 * g_sy
  286.     CALL IniGad(2,2,0,'SETUP' nbases,CENTER(GetLocale(4),24))
  287.     box.h = y
  288.     n2.nmain = n - 1
  289.  
  290.     n1.nborder = n
  291.     y = box.top
  292.     CALL IniGad(3,2,0,'BORDER' bt '%1' n n + 4'%2%g',win.bt,3)
  293.     CALL IniGad(1,0,1,,GetLocale(5))
  294.     y = y + g_hei.3 + 4 * g_sy
  295.     CALL IniGad(1,2,0,,GetLocale(6))
  296.     y = y + g_hei.3 + 4 * g_sy
  297.     CALL IniGad(1,1,0,,GetLocale(7))
  298.     CALL IniGad(3,0,1,'BORDER' bl '%1' n n + 1'%2%g',win.bl,3)
  299.     n1 = IniGad(3,0,0,'BORDER' br '%1' n n + 2'%2%g',win.br,3)
  300.     n2 = IniGad(1,0,1,,GetLocale(8))
  301.     x = box.left + box.w - x; g_xpos.n1 = g_xpos.n1 + x; g_xpos.n2 = g_xpos.n2 + x
  302.     y = y + g_hei.3 + 4 * g_sy
  303.     CALL IniGad(3,2,0,'BORDER' bb '%1' n n1.nborder '%2%g',win.bb,3)
  304.     CALL IniGad(1,0,1,,GetLocale(9))
  305.     box.h = MAX(box.h,y)
  306.     n2.nborder = n - 1
  307.  
  308.     n1.nlocale = n
  309.     y = box.top
  310.     CALL IniFileGad('REQFILE ED',olefile.ed,GetLocale(10))
  311.     y = y + g_hei.3 + 2 * g_sy
  312.     CALL IniFileGad('REQFILE CT',olefile.ct,GetLocale(11))
  313.     y = y + g_hei.3 + 2 * g_sy
  314.     CALL IniGad(2,1,0,'CATALOG EDIT',GetLocale(12))
  315.     CALL IniGad(2,0,1,'CATALOG MAKE',GetLocale(13))
  316.     box.h = MAX(box.h,y)
  317.     n2.nlocale = n - 1
  318.  
  319.     n1.nprog = n
  320.     y = box.top
  321.     CALL IniGad(1,2,0,,GetLocale(17))
  322.     y = y + g_hei.3 + 2 * g_sy
  323.     CALL IniGad(2,1,0,'PROGIND OUTER%1' n + 3,GetLocale(18))
  324.     CALL IniGad(2,2,0,'PROGIND INNER%1' n + 2,GetLocale(19))
  325.     CALL IniGad(2,3,0,'PROGIND COLOR%1' n + 1,GetLocale(20))
  326.     y = y + g_hei.3 + 2 * g_sy
  327.     CALL IniGad(5,1,0)
  328.     y = y + g_hei.5 + 2 * g_sy
  329.     CALL IniGad(2,2,0,'PROGIND%1' n - 1,GetLocale(21))
  330.     box.h = MAX(box.h,y)
  331.     n2.nprog = n - 1
  332.  
  333.     n1.nbases = n
  334.     y = box.top
  335.     CALL IniGad(1,2,0,,GetLocale(14))
  336.     box.h = MAX(box.h,y)
  337.     n2.nbases = n - 1
  338.  
  339.     y = box.h + g_hei.3 + 2 * g_sy
  340.     CALL IniGad(2,1,0,'OKAY',GetLocale(15))
  341.     g_gads = IniGad(2,3,0,'HELP',GetLocale(16))
  342.  
  343.     box.h = y + g_hei.2 + 2 * g_sy - box.top
  344.  
  345.     win.w = box.w + 2 * g_sx + win.bl + win.br
  346.     win.h = box.h + 2 * g_sy + win.bt + win.bb
  347.     WINDOW jobID modID (box.w + 2 * g_sx) (box.h + 2 * g_sy) 1 1
  348.     CALL Gadgets(4,g_gads - 1,g_gads)
  349.     CALL Gadgets(4,n1.nmain,n2.nmain)
  350.  
  351. RETURN nmain
  352.  
  353.  
  354. Gadgets:
  355.  
  356.     IF ARG(1) < 4 THEN
  357.         DO i = 2 TO ARG(); n = ARG(i)
  358.             IF ARG(1) ~= 1 THEN CALL DelGad(n,g_type.n)
  359.             IF ARG(1) ~= 3 THEN CALL NewGad(n,g_type.n)
  360.         END
  361.  
  362.     ELSE IF ARG(1) < 7 THEN
  363.         DO n = ARG(2) TO ARG(3)
  364.             IF ARG(1) ~= 4 THEN CALL DelGad(n,g_type.n)
  365.             IF ARG(1) ~= 6 THEN CALL NewGad(n,g_type.n)
  366.         END
  367.  
  368.     ELSE IF ARG(1) = 8 THEN
  369.         DO n = ARG(2) TO ARG(3)
  370.             IF g_onoff.n THEN CALL NewGad(n,g_type.n)
  371.         END
  372.  
  373.     ELSE DO
  374.         DO n = ARG(2) TO ARG(3)
  375.             g_onoff.n = 0
  376.             IF g_type.n ~= 1 & g_type.n ~= 5 THEN CALL RemoveGadget(olewin,GAD.n)
  377.         END
  378.         CALL SetAPen(olewin,0)
  379.         CALL RectFill(olewin,box.left,box.top,box.left + box.w,box.top + box.h)
  380.         CALL RefreshGadgets(olewin)
  381.         END
  382. RETURN
  383.  
  384.  
  385. DelGad:
  386. PARSE ARG n,t
  387.  
  388.     g_onoff.n = 0
  389.  
  390.     IF t ~= 1 & t ~= 5 THEN CALL RemoveGadget(olewin,GAD.n)
  391.  
  392.     x = g_xpos.n - g_offx.t; y = g_ypos.n - g_offy.t
  393.     CALL SetAPen(olewin,0)
  394.     CALL RectFill(olewin,x,y,x + g_len.n,y + g_hei.t)
  395.  
  396. RETURN
  397.  
  398.  
  399. NewGad:
  400. PARSE ARG n,t
  401.  
  402.     g_onoff.n = 1
  403.  
  404.     IF t = 2 THEN
  405.         CALL AddGadGet(olewin,g_xpos.n,g_ypos.n,GAD.n,g_str.n,g_msg.n)
  406.  
  407.     ELSE IF t = 3 THEN
  408.         CALL AddGadGet(olewin,g_xpos.n,g_ypos.n,GAD.n,g_str.n,g_msg.n,g_len.n - 4,"RIDGEBORDER")
  409.  
  410.     ELSE IF t = 4 THEN
  411.         CALL AddGadGet(olewin,g_xpos.n,g_ypos.n,GAD.n,D2C(32 + g_str.n * 183),g_msg.n)
  412.  
  413.     ELSE IF t = 5 THEN DO
  414.         CALL DrawProgInd(g_xpos.n + 2, g_ypos.n + 2,g_xpos.n + g_len.n - 2, g_ypos.n + g_hei.t - 2,oleind.outer)
  415.         CALL DrawProgInd(g_xpos.n + 10,g_ypos.n + 6,g_xpos.n + g_len.n - 10,g_ypos.n + g_hei.t - 6,oleind.inner)
  416.         CALL FillProgInd(n,100,oleind.color)
  417.         END
  418.  
  419.     ELSE DO
  420.         CALL SetAPen(olewin,1)
  421.         CALL Move(olewin,g_xpos.n,g_ypos.n)
  422.         CALL Text(olewin,g_str.n)
  423.         END
  424. RETURN
  425.  
  426.  
  427. IniGad:
  428. PARSE ARG t,na,nx,g_msg.n,g_str.n,var
  429.  
  430.     x = x + nx * g_sx
  431.  
  432.     IF t = 3 & var > 0 THEN
  433.         g_len.n = var * char.w + g_wid.t
  434.     ELSE IF t = 3 THEN
  435.         g_len.n = box.left + box.w - x
  436.     ELSE IF t = 5 THEN
  437.         g_len.n = box.w
  438.     ELSE
  439.         g_len.n = LENGTH(g_str.n) * char.w + g_wid.t
  440.  
  441.     IF na > 0 THEN x = box.left + (na - 1) * (box.w - g_len.n) % 2 + nx * g_sx
  442.  
  443.     g_xpos.n = x + g_offx.t; g_ypos.n = y + g_offy.t; g_type.n = t
  444.     x = x + g_len.n
  445.     n = n + 1
  446.  
  447.     IF t = 4 THEN CALL IniGad(1,0,1,,var)
  448.  
  449. RETURN n - 1
  450.  
  451.  
  452. IniFileGad:
  453. PARSE ARG msg,str,txt
  454.  
  455.     CALL IniGad(1,1,0,,txt)
  456.     y = y + g_hei.1 + 2 * g_sy
  457.     CALL IniGad(2,1,0,msg '%1' (n + 1),'F')
  458.     CALL IniGad(3,0,1,msg '%1' n '%2%g',str)
  459.  
  460. RETURN n - 1
  461.